package wicket;

import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.Radio;
import org.apache.wicket.markup.html.form.RadioGroup;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.PropertyListView;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.uqbar.commons.model.UserException;

import plantasVsZombies.AdministradorJardinZen;
import plantasVsZombies.AlmanaqueZombie;
import plantaszombies.Mejora;
import plantaszombies.Partida;
import plantaszombies.Planta;
import plantaszombies.Semilla;
import plantaszombies.Terreno;

public class MejorasPage extends WebPage {

	private AdministradorJardinZen administrador;
	private WebPage paginaAnterior;
	private Button comprarButton;

	public MejorasPage(JardinZenPage jardinZenPage, AdministradorJardinZen administrador) {
		this.administrador = administrador;
		this.paginaAnterior = jardinZenPage;

		this.addMejorasForm();
		this.agregarMejorasCompradas();
	}

	protected void addMejorasForm() {
		Form<AdministradorJardinZen> mejorasForm = new Form<AdministradorJardinZen>("mejorasForm", new CompoundPropertyModel(this.administrador));
		
		mejorasForm.add(new Label("recursos"));
		mejorasForm.add(new Label("nombreSemillaSeleccionada"));
		
		this.agregarMejorasParaComprar(mejorasForm);
		this.addButton(mejorasForm);
		mejorasForm.add(new FeedbackPanel("feedbackPanel"));
		this.add(mejorasForm);
	}

	private void agregarMejorasParaComprar(Form<AdministradorJardinZen> mejorasForm) {
		final RadioGroup<Mejora> radioGroup = new RadioGroup<Mejora>("mejoraSeleccionada");
		radioGroup.add(new PropertyListView<Mejora>("mejorasPredefinidas") {
			@Override
			protected void populateItem(final ListItem<Mejora> item) {
				item.add(new Radio<Mejora>("radioMejora", item.getModel()));
				item.add(new Label("nombre"));
				item.add(new Label("porcDeMejora"));
				item.add(new Label("costo"));
			}
		});
		radioGroup.add(new AjaxFormChoiceComponentUpdatingBehavior() {
			@Override
			protected void onUpdate(AjaxRequestTarget target) {
				target.add(comprarButton);
			}

		});
		mejorasForm.add(radioGroup);
	}
	
	private void addButton(final Form<AdministradorJardinZen> mejorasForm) {
		
		mejorasForm.add(this.comprarButton = new Button("comprar") {
			@Override
			public void onSubmit() {
				try{
					MejorasPage.this.administrador.comprarMejora();
				}catch(UserException e) {
                    error(e.getMessage());
                }			
			}
		});
		this.comprarButton.add(new Behavior() {
			@Override
			public void onConfigure(Component component) {
				component.setEnabled(mejorasForm.getModelObject().getMejoraSeleccionada() != null);
			}
		});
		
		this.comprarButton.setOutputMarkupId(true);
		mejorasForm.add(new Button("volver") {
			@Override
			public void onSubmit() {
				this.setResponsePage(MejorasPage.this.paginaAnterior);
			}
		});
		
	}

	private void agregarMejorasCompradas() {
		WebMarkupContainer panel = new WebMarkupContainer("mejorasCompradas", new CompoundPropertyModel(this.administrador.semillaSeleccionada));
		this.add(panel);
		panel.add(new PropertyListView<Mejora>("mejorasAplicadas") {
			protected void populateItem(final ListItem<Mejora> item) {	
				item.add(new Label("nombre"));
			}
		});
	}


}
